{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Metrics with eland\n",
    "\n",
    "Use the [`eland` library](https://eland.readthedocs.io) to generate search metrics based on data in an Elasticsearch index. All indices and transforms should have already been created and run before this notebook can be used. We operate on the two main indices: events in `ecs-search-metrics` and the post-transform query-level metrics in `ecs-search-metrics_transform_queryid`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "\n",
    "import eland as el\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "ES_URL = 'http://localhost:9200/'"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Data Loading and Preparation"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Event Index\n",
    "\n",
    "The `ecs-search-metrics` index contains the raw behavioural events: query, page and click."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "df = el.read_es(ES_URL, 'ecs-search-metrics')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "@timestamp                                    datetime64[ns]\n",
       "SearchMetrics.click.result.id                         object\n",
       "SearchMetrics.click.result.rank                        int64\n",
       "SearchMetrics.click.result.reciprocal_rank           float64\n",
       "SearchMetrics.query.id                                object\n",
       "SearchMetrics.query.page                               int64\n",
       "SearchMetrics.query.value                             object\n",
       "SearchMetrics.results.ids                             object\n",
       "SearchMetrics.results.size                             int64\n",
       "SearchMetrics.results.total                            int64\n",
       "SearchMetricsSimulation.ab.experiment                 object\n",
       "SearchMetricsSimulation.ab.variant                    object\n",
       "SearchMetricsSimulation.page_name                     object\n",
       "ecs.version                                           object\n",
       "event.action                                          object\n",
       "event.dataset                                         object\n",
       "event.duration                                         int64\n",
       "event.id                                              object\n",
       "source.geo.city_name                                  object\n",
       "source.geo.country_iso_code                           object\n",
       "source.geo.location                                   object\n",
       "source.user.id                                        object\n",
       "dtype: object"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.dtypes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "es_index_pattern: ecs-search-metrics\n",
      "Index:\n",
      " es_index_field: _id\n",
      " is_source_field: False\n",
      "Mappings:\n",
      " capabilities:\n",
      "                                                                         es_field_name  is_source   es_dtype es_date_format        pd_dtype  is_searchable  is_aggregatable  is_scripted                  aggregatable_es_field_name\n",
      "@timestamp                                                                  @timestamp       True       date           None  datetime64[ns]           True             True        False                                  @timestamp\n",
      "SearchMetrics.click.result.id                            SearchMetrics.click.result.id       True    keyword           None          object           True             True        False               SearchMetrics.click.result.id\n",
      "SearchMetrics.click.result.rank                        SearchMetrics.click.result.rank       True       long           None           int64           True             True        False             SearchMetrics.click.result.rank\n",
      "SearchMetrics.click.result.reciprocal_rank  SearchMetrics.click.result.reciprocal_rank       True      float           None         float64           True             True        False  SearchMetrics.click.result.reciprocal_rank\n",
      "SearchMetrics.query.id                                          SearchMetrics.query.id       True    keyword           None          object           True             True        False                      SearchMetrics.query.id\n",
      "SearchMetrics.query.page                                      SearchMetrics.query.page       True       long           None           int64           True             True        False                    SearchMetrics.query.page\n",
      "SearchMetrics.query.value                                    SearchMetrics.query.value       True    keyword           None          object           True             True        False                   SearchMetrics.query.value\n",
      "SearchMetrics.results.ids                                    SearchMetrics.results.ids       True    keyword           None          object           True             True        False                   SearchMetrics.results.ids\n",
      "SearchMetrics.results.size                                  SearchMetrics.results.size       True       long           None           int64           True             True        False                  SearchMetrics.results.size\n",
      "SearchMetrics.results.total                                SearchMetrics.results.total       True       long           None           int64           True             True        False                 SearchMetrics.results.total\n",
      "SearchMetricsSimulation.ab.experiment            SearchMetricsSimulation.ab.experiment       True    keyword           None          object           True             True        False       SearchMetricsSimulation.ab.experiment\n",
      "SearchMetricsSimulation.ab.variant                  SearchMetricsSimulation.ab.variant       True    keyword           None          object           True             True        False          SearchMetricsSimulation.ab.variant\n",
      "SearchMetricsSimulation.page_name                    SearchMetricsSimulation.page_name       True    keyword           None          object           True             True        False           SearchMetricsSimulation.page_name\n",
      "ecs.version                                                                ecs.version       True    keyword           None          object           True             True        False                                 ecs.version\n",
      "event.action                                                              event.action       True    keyword           None          object           True             True        False                                event.action\n",
      "event.dataset                                                            event.dataset       True    keyword           None          object           True             True        False                               event.dataset\n",
      "event.duration                                                          event.duration       True       long           None           int64           True             True        False                              event.duration\n",
      "event.id                                                                      event.id       True    keyword           None          object           True             True        False                                    event.id\n",
      "source.geo.city_name                                              source.geo.city_name       True    keyword           None          object           True             True        False                        source.geo.city_name\n",
      "source.geo.country_iso_code                                source.geo.country_iso_code       True    keyword           None          object           True             True        False                 source.geo.country_iso_code\n",
      "source.geo.location                                                source.geo.location       True  geo_point           None          object           True             True        False                         source.geo.location\n",
      "source.user.id                                                          source.user.id       True    keyword           None          object           True             True        False                              source.user.id\n",
      "Operations:\n",
      " tasks: []\n",
      " size: None\n",
      " sort_params: None\n",
      " _source: ['@timestamp', 'SearchMetrics.click.result.id', 'SearchMetrics.click.result.rank', 'SearchMetrics.click.result.reciprocal_rank', 'SearchMetrics.query.id', 'SearchMetrics.query.page', 'SearchMetrics.query.value', 'SearchMetrics.results.ids', 'SearchMetrics.results.size', 'SearchMetrics.results.total', 'SearchMetricsSimulation.ab.experiment', 'SearchMetricsSimulation.ab.variant', 'SearchMetricsSimulation.page_name', 'ecs.version', 'event.action', 'event.dataset', 'event.duration', 'event.id', 'source.geo.city_name', 'source.geo.country_iso_code', 'source.geo.location', 'source.user.id']\n",
      " body: {}\n",
      " post_processing: []\n",
      "\n"
     ]
    }
   ],
   "source": [
    "print(df.info_es())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>@timestamp</th>\n",
       "      <th>SearchMetrics.click.result.id</th>\n",
       "      <th>SearchMetrics.click.result.rank</th>\n",
       "      <th>SearchMetrics.click.result.reciprocal_rank</th>\n",
       "      <th>SearchMetrics.query.id</th>\n",
       "      <th>SearchMetrics.query.page</th>\n",
       "      <th>SearchMetrics.query.value</th>\n",
       "      <th>SearchMetrics.results.ids</th>\n",
       "      <th>SearchMetrics.results.size</th>\n",
       "      <th>SearchMetrics.results.total</th>\n",
       "      <th>...</th>\n",
       "      <th>SearchMetricsSimulation.page_name</th>\n",
       "      <th>ecs.version</th>\n",
       "      <th>event.action</th>\n",
       "      <th>event.dataset</th>\n",
       "      <th>event.duration</th>\n",
       "      <th>event.id</th>\n",
       "      <th>source.geo.city_name</th>\n",
       "      <th>source.geo.country_iso_code</th>\n",
       "      <th>source.geo.location</th>\n",
       "      <th>source.user.id</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>FbCZdHIBV286dKaWk0Zt</th>\n",
       "      <td>2019-11-15 23:39:37+00:00</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>23bd7c41-e138-4a75-b6f0-c58750d0ee17</td>\n",
       "      <td>1</td>\n",
       "      <td>By Very hospital possible base</td>\n",
       "      <td>[17, 86, 20, 48, 30, 51, 52, 62, 7, 60]</td>\n",
       "      <td>10.0</td>\n",
       "      <td>63.0</td>\n",
       "      <td>...</td>\n",
       "      <td>product_search_page</td>\n",
       "      <td>1.6.0-dev</td>\n",
       "      <td>SearchMetrics.query</td>\n",
       "      <td>SearchMetrics.query</td>\n",
       "      <td>254000000.0</td>\n",
       "      <td>23bd7c41-e138-4a75-b6f0-c58750d0ee17</td>\n",
       "      <td>Soroca</td>\n",
       "      <td>MD</td>\n",
       "      <td>48.15659,28.28489</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>FrCZdHIBV286dKaWk0aa</th>\n",
       "      <td>2019-11-15 23:39:37+00:00</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>23bd7c41-e138-4a75-b6f0-c58750d0ee17</td>\n",
       "      <td>2</td>\n",
       "      <td>NaN</td>\n",
       "      <td>[55, 56, 90, 26, 54, 15, 64, 6, 27, 97]</td>\n",
       "      <td>10.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.6.0-dev</td>\n",
       "      <td>SearchMetrics.page</td>\n",
       "      <td>SearchMetrics.page</td>\n",
       "      <td>274.0</td>\n",
       "      <td>279ace95-46cf-438e-a31e-bf82daa8f64b</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F7CZdHIBV286dKaWk0bR</th>\n",
       "      <td>2019-11-15 23:40:34+00:00</td>\n",
       "      <td>55</td>\n",
       "      <td>11.0</td>\n",
       "      <td>0.090909</td>\n",
       "      <td>23bd7c41-e138-4a75-b6f0-c58750d0ee17</td>\n",
       "      <td>2</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.6.0-dev</td>\n",
       "      <td>SearchMetrics.click</td>\n",
       "      <td>SearchMetrics.click</td>\n",
       "      <td>NaN</td>\n",
       "      <td>87deadce-3e18-455f-9506-7c89aa1dba16</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>GLCZdHIBV286dKaWk0b-</th>\n",
       "      <td>2019-11-15 23:40:18+00:00</td>\n",
       "      <td>15</td>\n",
       "      <td>16.0</td>\n",
       "      <td>0.062500</td>\n",
       "      <td>23bd7c41-e138-4a75-b6f0-c58750d0ee17</td>\n",
       "      <td>2</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.6.0-dev</td>\n",
       "      <td>SearchMetrics.click</td>\n",
       "      <td>SearchMetrics.click</td>\n",
       "      <td>NaN</td>\n",
       "      <td>7344dede-169e-4d7f-aa93-221a2a32eac2</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>GbCZdHIBV286dKaWlEYs</th>\n",
       "      <td>2019-11-15 16:39:07+00:00</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>9b9e7d08-73bb-414c-9306-37f6bbb97943</td>\n",
       "      <td>1</td>\n",
       "      <td>Coach condition history window</td>\n",
       "      <td>[56, 26, 18, 76, 9, 16, 79, 61, 12, 57]</td>\n",
       "      <td>10.0</td>\n",
       "      <td>77.0</td>\n",
       "      <td>...</td>\n",
       "      <td>home_page_onebox</td>\n",
       "      <td>1.6.0-dev</td>\n",
       "      <td>SearchMetrics.query</td>\n",
       "      <td>SearchMetrics.query</td>\n",
       "      <td>44000000.0</td>\n",
       "      <td>9b9e7d08-73bb-414c-9306-37f6bbb97943</td>\n",
       "      <td>Karbala</td>\n",
       "      <td>IQ</td>\n",
       "      <td>32.61603,44.02488</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>\n",
       "<p>5 rows × 22 columns</p>"
      ],
      "text/plain": [
       "                                    @timestamp SearchMetrics.click.result.id  \\\n",
       "FbCZdHIBV286dKaWk0Zt 2019-11-15 23:39:37+00:00                           NaN   \n",
       "FrCZdHIBV286dKaWk0aa 2019-11-15 23:39:37+00:00                           NaN   \n",
       "F7CZdHIBV286dKaWk0bR 2019-11-15 23:40:34+00:00                            55   \n",
       "GLCZdHIBV286dKaWk0b- 2019-11-15 23:40:18+00:00                            15   \n",
       "GbCZdHIBV286dKaWlEYs 2019-11-15 16:39:07+00:00                           NaN   \n",
       "\n",
       "                      SearchMetrics.click.result.rank  \\\n",
       "FbCZdHIBV286dKaWk0Zt                              NaN   \n",
       "FrCZdHIBV286dKaWk0aa                              NaN   \n",
       "F7CZdHIBV286dKaWk0bR                             11.0   \n",
       "GLCZdHIBV286dKaWk0b-                             16.0   \n",
       "GbCZdHIBV286dKaWlEYs                              NaN   \n",
       "\n",
       "                      SearchMetrics.click.result.reciprocal_rank  \\\n",
       "FbCZdHIBV286dKaWk0Zt                                         NaN   \n",
       "FrCZdHIBV286dKaWk0aa                                         NaN   \n",
       "F7CZdHIBV286dKaWk0bR                                    0.090909   \n",
       "GLCZdHIBV286dKaWk0b-                                    0.062500   \n",
       "GbCZdHIBV286dKaWlEYs                                         NaN   \n",
       "\n",
       "                                    SearchMetrics.query.id  \\\n",
       "FbCZdHIBV286dKaWk0Zt  23bd7c41-e138-4a75-b6f0-c58750d0ee17   \n",
       "FrCZdHIBV286dKaWk0aa  23bd7c41-e138-4a75-b6f0-c58750d0ee17   \n",
       "F7CZdHIBV286dKaWk0bR  23bd7c41-e138-4a75-b6f0-c58750d0ee17   \n",
       "GLCZdHIBV286dKaWk0b-  23bd7c41-e138-4a75-b6f0-c58750d0ee17   \n",
       "GbCZdHIBV286dKaWlEYs  9b9e7d08-73bb-414c-9306-37f6bbb97943   \n",
       "\n",
       "                      SearchMetrics.query.page  \\\n",
       "FbCZdHIBV286dKaWk0Zt                         1   \n",
       "FrCZdHIBV286dKaWk0aa                         2   \n",
       "F7CZdHIBV286dKaWk0bR                         2   \n",
       "GLCZdHIBV286dKaWk0b-                         2   \n",
       "GbCZdHIBV286dKaWlEYs                         1   \n",
       "\n",
       "                           SearchMetrics.query.value  \\\n",
       "FbCZdHIBV286dKaWk0Zt  By Very hospital possible base   \n",
       "FrCZdHIBV286dKaWk0aa                             NaN   \n",
       "F7CZdHIBV286dKaWk0bR                             NaN   \n",
       "GLCZdHIBV286dKaWk0b-                             NaN   \n",
       "GbCZdHIBV286dKaWlEYs  Coach condition history window   \n",
       "\n",
       "                                    SearchMetrics.results.ids  \\\n",
       "FbCZdHIBV286dKaWk0Zt  [17, 86, 20, 48, 30, 51, 52, 62, 7, 60]   \n",
       "FrCZdHIBV286dKaWk0aa  [55, 56, 90, 26, 54, 15, 64, 6, 27, 97]   \n",
       "F7CZdHIBV286dKaWk0bR                                      NaN   \n",
       "GLCZdHIBV286dKaWk0b-                                      NaN   \n",
       "GbCZdHIBV286dKaWlEYs  [56, 26, 18, 76, 9, 16, 79, 61, 12, 57]   \n",
       "\n",
       "                      SearchMetrics.results.size  SearchMetrics.results.total  \\\n",
       "FbCZdHIBV286dKaWk0Zt                        10.0                         63.0   \n",
       "FrCZdHIBV286dKaWk0aa                        10.0                          NaN   \n",
       "F7CZdHIBV286dKaWk0bR                         NaN                          NaN   \n",
       "GLCZdHIBV286dKaWk0b-                         NaN                          NaN   \n",
       "GbCZdHIBV286dKaWlEYs                        10.0                         77.0   \n",
       "\n",
       "                      ... SearchMetricsSimulation.page_name ecs.version  \\\n",
       "FbCZdHIBV286dKaWk0Zt  ...               product_search_page   1.6.0-dev   \n",
       "FrCZdHIBV286dKaWk0aa  ...                               NaN   1.6.0-dev   \n",
       "F7CZdHIBV286dKaWk0bR  ...                               NaN   1.6.0-dev   \n",
       "GLCZdHIBV286dKaWk0b-  ...                               NaN   1.6.0-dev   \n",
       "GbCZdHIBV286dKaWlEYs  ...                  home_page_onebox   1.6.0-dev   \n",
       "\n",
       "                             event.action        event.dataset event.duration  \\\n",
       "FbCZdHIBV286dKaWk0Zt  SearchMetrics.query  SearchMetrics.query    254000000.0   \n",
       "FrCZdHIBV286dKaWk0aa   SearchMetrics.page   SearchMetrics.page          274.0   \n",
       "F7CZdHIBV286dKaWk0bR  SearchMetrics.click  SearchMetrics.click            NaN   \n",
       "GLCZdHIBV286dKaWk0b-  SearchMetrics.click  SearchMetrics.click            NaN   \n",
       "GbCZdHIBV286dKaWlEYs  SearchMetrics.query  SearchMetrics.query     44000000.0   \n",
       "\n",
       "                                                  event.id  \\\n",
       "FbCZdHIBV286dKaWk0Zt  23bd7c41-e138-4a75-b6f0-c58750d0ee17   \n",
       "FrCZdHIBV286dKaWk0aa  279ace95-46cf-438e-a31e-bf82daa8f64b   \n",
       "F7CZdHIBV286dKaWk0bR  87deadce-3e18-455f-9506-7c89aa1dba16   \n",
       "GLCZdHIBV286dKaWk0b-  7344dede-169e-4d7f-aa93-221a2a32eac2   \n",
       "GbCZdHIBV286dKaWlEYs  9b9e7d08-73bb-414c-9306-37f6bbb97943   \n",
       "\n",
       "                      source.geo.city_name source.geo.country_iso_code  \\\n",
       "FbCZdHIBV286dKaWk0Zt                Soroca                          MD   \n",
       "FrCZdHIBV286dKaWk0aa                   NaN                         NaN   \n",
       "F7CZdHIBV286dKaWk0bR                   NaN                         NaN   \n",
       "GLCZdHIBV286dKaWk0b-                   NaN                         NaN   \n",
       "GbCZdHIBV286dKaWlEYs               Karbala                          IQ   \n",
       "\n",
       "                     source.geo.location source.user.id  \n",
       "FbCZdHIBV286dKaWk0Zt   48.15659,28.28489              0  \n",
       "FrCZdHIBV286dKaWk0aa                 NaN            NaN  \n",
       "F7CZdHIBV286dKaWk0bR                 NaN            NaN  \n",
       "GLCZdHIBV286dKaWk0b-                 NaN            NaN  \n",
       "GbCZdHIBV286dKaWlEYs   32.61603,44.02488              1  \n",
       "\n",
       "[5 rows x 22 columns]"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "What is the distribution of ranks of results clicked on?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>SearchMetrics.click.result.rank</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>84.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>8.440476</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>5.423387</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>4.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>8.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>13.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>20.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       SearchMetrics.click.result.rank\n",
       "count                        84.000000\n",
       "mean                          8.440476\n",
       "std                           5.423387\n",
       "min                           1.000000\n",
       "25%                           4.000000\n",
       "50%                           8.000000\n",
       "75%                          13.000000\n",
       "max                          20.000000"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['SearchMetrics.click.result.rank'].describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x11ec9d7d0>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXAAAAD4CAYAAAD1jb0+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAARaElEQVR4nO3df4zkdX3H8ee7nMaDpQcUO6UH6WljSCxbLTex/qrdLZaeQMQ2poVQC0qzMS0tNmfIGVP1H1OsOVv7IzWnEmglrBGxUtAKpWxJEyHdo8DySwF7VU44atHDxUt067t/7JdmO8zszM73OzP78Z6PZLMz3x/zed1nZ1/73e/OfC8yE0lSeX5s0gEkScOxwCWpUBa4JBXKApekQlngklSoLeMc7OSTT84dO3aMc8iBPfvssxx33HGTjtGT+eoxXz3mq69Oxv37938rM1/8vBWZObaPnTt35mZ1++23TzrCusxXj/nqMV99dTICi9mlUz2FIkmFssAlqVAWuCQVygKXpEJZ4JJUKAtckgplgUtSoSxwSSqUBS5JhRrrW+nr2LHn5pE+/u7pFS7pMcaBK88d6diSNAyPwCWpUBa4JBXKApekQlngklQoC1ySCmWBS1KhLHBJKpQFLkmFssAlqVB9CzwiroqIpyLi/i7rdkdERsTJo4knSeplkCPwq4FdnQsj4jTgbODrDWeSJA2gb4Fn5h3A011W/RlwBZBNh5Ik9TfUOfCIOB84mJn3NpxHkjSgyOx/AB0RO4CbMvOMiDgWuB04OzMPR8QBoJ2Z3+qx7xwwB9BqtXbOz88PFXTp4OGh9htUayscOtJ93fT2bSMdexDLy8tMTU1NOkZP5qvHfPVs9nxQL+Ps7Oz+zGx3Lh+mwKeB24DvVatPBb4JvCozn1zvcdrtdi4uLm4w+qpxXE5271L3q+tuhsvJLiwsMDMzM+kYPZmvHvPVs9nzQb2MEdG1wDd8PfDMXAJ+cs0DH2CdI3BJ0mgM8jLC64AvA6dHxOMRcenoY0mS+ul7BJ6ZF/ZZv6OxNJKkgflOTEkqlAUuSYWywCWpUBa4JBXKApekQlngklQoC1ySCmWBS1KhLHBJKpQFLkmFssAlqVAWuCQVygKXpEJZ4JJUKAtckgplgUtSoSxwSSqUBS5JhbLAJalQg/ynxldFxFMRcf+aZR+OiIcj4r6I+FxEnDDamJKkToMcgV8N7OpYditwRmb+PPBV4D0N55Ik9dG3wDPzDuDpjmW3ZOZKdfdO4NQRZJMkrSMys/9GETuAmzLzjC7r/gH4dGZ+qse+c8AcQKvV2jk/Pz9U0KWDh4fab1CtrXDoSPd109u3jXTsQSwvLzM1NTXpGD2Zrx7z1bPZ80G9jLOzs/szs925fEudQBHxXmAFuLbXNpm5D9gH0G63c2ZmZqixLtlz81D7DWr39Ap7l7pPx4GLZkY69iAWFhYYdu7GwXz1mK+ezZ4PRpNx6AKPiEuA84CzcpDDeElSo4Yq8IjYBVwB/HJmfq/ZSJKkQQzyMsLrgC8Dp0fE4xFxKfBXwPHArRFxT0R8bMQ5JUkd+h6BZ+aFXRZ/cgRZJEkb4DsxJalQFrgkFcoCl6RCWeCSVCgLXJIKZYFLUqEscEkqlAUuSYWqdTGro8WOEV9Iq5cDV547kXEnaVRzvXt6Zd0Loh2Nc63yeQQuSYWywCWpUBa4JBXKApekQlngklQoC1ySCmWBS1KhLHBJKpQFLkmFssAlqVCD/KfGV0XEUxFx/5plJ0XErRHxSPX5xNHGlCR1GuQI/GpgV8eyPcBtmfky4LbqviRpjPoWeGbeATzdsfh84Jrq9jXAWxrOJUnqIzKz/0YRO4CbMvOM6v53MvOE6nYA337ufpd954A5gFartXN+fn6ooEsHDw+136BaW+HQkZEOUcs4801v37bhfZaXl5mamqo99qi+zv3mb5h/c5Oamr9RMV99dTLOzs7uz8x25/Lal5PNzIyInj8FMnMfsA+g3W7nzMzMUOOsdynQJuyeXmHv0ua9uu448x24aGbD+ywsLDDs13atUX2d+83fMP/mJjU1f6NivvpGkXHYV6EciohTAKrPTzUXSZI0iGEL/Ebg4ur2xcDnm4kjSRrUIC8jvA74MnB6RDweEZcCVwK/GhGPAG+s7kuSxqjvSdXMvLDHqrMaziJJ2gDfiSlJhbLAJalQFrgkFcoCl6RCWeCSVCgLXJIKZYFLUqEscEkqlAUuSYWywCWpUBa4JBXKApekQlngklQoC1ySCmWBS1KhLHBJKpQFLkmFssAlqVC1Cjwi/igiHoiI+yPiuoh4UVPBJEnrG7rAI2I78IdAOzPPAI4BLmgqmCRpfXVPoWwBtkbEFuBY4Jv1I0mSBhGZOfzOEZcDHwSOALdk5kVdtpkD5gBardbO+fn5ocZaOnh46JyDaG2FQ0dGOkQt5qunX77p7dvGF6aL5eVlpqamxjrmRr6nmv76Nj3fk5i/jaqTcXZ2dn9mtjuXD13gEXEi8Fngt4DvAJ8Brs/MT/Xap91u5+Li4lDj7dhz81D7DWr39Ap7l7aMdIw6zFdPv3wHrjx3jGmeb2FhgZmZmbGOuZHvqaa/vk3P9yTmb6PqZIyIrgVe5xTKG4H/yMz/yswfADcAr63xeJKkDahT4F8HXh0Rx0ZEAGcBDzUTS5LUz9AFnpl3AdcDdwNL1WPtayiXJKmPWie1MvP9wPsbyiJJ2gDfiSlJhbLAJalQFrgkFcoCl6RCWeCSVCgLXJIKZYFLUqEscEkq1Oa9+pA0RqO+WFo/u6dXuGTCGVQej8AlqVAWuCQVygKXpEJZ4JJUKAtckgplgUtSoSxwSSqUBS5JhbLAJalQFrgkFapWgUfECRFxfUQ8HBEPRcRrmgomSVpf3WuhfBT4x8x8a0S8EDi2gUySpAEMXeARsQ14A3AJQGZ+H/h+M7EkSf1EZg63Y8QrgX3Ag8ArgP3A5Zn5bMd2c8AcQKvV2jk/Pz/UeEsHDw+136BaW+HQkZEOUYv56jFfPU3nm96+rbkHA5aXl5mammr0MZtWJ+Ps7Oz+zGx3Lq9T4G3gTuB1mXlXRHwUeCYz/7jXPu12OxcXF4cab9SX+9w9vcLepc17dV3z1WO+eprOd+DKcxt7LICFhQVmZmYafcym1ckYEV0LvM4fMR8HHs/Mu6r71wNn1ng8SdIGDF3gmfkk8I2IOL1adBarp1MkSWNQ93eiPwCurV6B8jXg7fUjSZIGUavAM/Me4HnnZSRJo+c7MSWpUBa4JBXKApekQlngklQoC1ySCmWBS1KhLHBJKpQFLkmFssAlqVAWuCQVygKXpEJZ4JJUKAtckgplgUtSoSxwSSqUBS5JhbLAJalQFrgkFap2gUfEMRHx7xFxUxOBJEmDaeII/HLgoQYeR5K0AbUKPCJOBc4FPtFMHEnSoOoegf85cAXwwwaySJI2IDJzuB0jzgPOyczfi4gZ4N2ZeV6X7eaAOYBWq7Vzfn5+qPGWDh4ear9BtbbCoSMjHaIW89Vjvnqazje9fVtzDwYsLy8zNTXVd7tR98h6XrLtmIEydjM7O7s/M9udy+sU+J8AbwNWgBcBPw7ckJm/3Wufdrudi4uLQ423Y8/NQ+03qN3TK+xd2jLSMeowXz3mq6fpfAeuPLexxwJYWFhgZmam73aj7pH1XL3ruIEydhMRXQt86FMomfmezDw1M3cAFwD/vF55S5Ka5evAJalQjfxOlJkLwEITjyVJGoxH4JJUKAtckgplgUtSoSxwSSqUBS5JhbLAJalQFrgkFcoCl6RCbd6LL0j6kdX0NUl2T69wyQSvczIpHoFLUqEscEkqlAUuSYWywCWpUBa4JBXKApekQlngklQoC1ySCmWBS1KhLHBJKtTQBR4Rp0XE7RHxYEQ8EBGXNxlMkrS+OtdCWQF2Z+bdEXE8sD8ibs3MBxvKJklax9BH4Jn5RGbeXd3+LvAQsL2pYJKk9UVm1n+QiB3AHcAZmflMx7o5YA6g1WrtnJ+fH2qMpYOH64Xso7UVDh0Z6RC1mK8e89Vjvvpesu0Ypqamhtp3dnZ2f2a2O5fXLvCImAL+BfhgZt6w3rbtdjsXFxeHGqfpy0922j29wt6lzXt1XfPVY756zFff1buOY2ZmZqh9I6Jrgdd6FUpEvAD4LHBtv/KWJDWrzqtQAvgk8FBmfqS5SJKkQdQ5An8d8DbgVyLinurjnIZySZL6GPqkUWb+KxANZpEkbYDvxJSkQlngklQoC1ySCmWBS1KhLHBJKpQFLkmFssAlqVAWuCQVygKXpEJZ4JJUKAtckgplgUtSoSxwSSqUBS5JhbLAJalQFrgkFcoCl6RCWeCSVCgLXJIKVavAI2JXRHwlIh6NiD1NhZIk9Td0gUfEMcBfA28CXg5cGBEvbyqYJGl9dY7AXwU8mplfy8zvA/PA+c3EkiT1E5k53I4RbwV2ZebvVvffBvxiZl7Wsd0cMFfdPR34yvBxR+pk4FuTDrEO89VjvnrMV1+djD+TmS/uXLilXp7+MnMfsG/U49QVEYuZ2Z50jl7MV4/56jFffaPIWOcUykHgtDX3T62WSZLGoE6B/xvwsoh4SUS8ELgAuLGZWJKkfoY+hZKZKxFxGfAl4Bjgqsx8oLFk47fZT/OYrx7z1WO++hrPOPQfMSVJk+U7MSWpUBa4JBXqqCrwiDgtIm6PiAcj4oGIuLzLNjMRcTgi7qk+3jfmjAciYqkae7HL+oiIv6guX3BfRJw5xmynr5mXeyLimYh4V8c2Y52/iLgqIp6KiPvXLDspIm6NiEeqzyf22PfiaptHIuLiMeb7cEQ8XH39PhcRJ/TYd93nwgjzfSAiDq75Gp7TY9+RX0qjR75Pr8l2ICLu6bHvOOava6eM7TmYmUfNB3AKcGZ1+3jgq8DLO7aZAW6aYMYDwMnrrD8H+CIQwKuBuyaU8xjgSVbfYDCx+QPeAJwJ3L9m2Z8Ce6rbe4APddnvJOBr1ecTq9snjinf2cCW6vaHuuUb5LkwwnwfAN49wNf/MeClwAuBezu/l0aVr2P9XuB9E5y/rp0yrufgUXUEnplPZObd1e3vAg8B2yebasPOB/42V90JnBARp0wgx1nAY5n5nxMY+/9k5h3A0x2LzweuqW5fA7yly66/BtyamU9n5reBW4Fd48iXmbdk5kp1905W30MxET3mbxBjuZTGevkiIoDfBK5retxBrdMpY3kOHlUFvlZE7AB+Abiry+rXRMS9EfHFiPi5sQaDBG6JiP3VZQg6bQe+seb+40zmh9AF9P7GmeT8AbQy84nq9pNAq8s2m2Ue38Hqb1Td9HsujNJl1Smeq3r8+r8Z5u+XgEOZ+UiP9WOdv45OGctz8Kgs8IiYAj4LvCszn+lYfTerpwVeAfwl8Pdjjvf6zDyT1as8/n5EvGHM4/dVvXHrzcBnuqye9Pz9P7n6u+qmfK1sRLwXWAGu7bHJpJ4LfwP8LPBK4AlWT1NsRhey/tH32OZvvU4Z5XPwqCvwiHgBqxN9bWbe0Lk+M5/JzOXq9heAF0TEyePKl5kHq89PAZ9j9VfVtTbDJQzeBNydmYc6V0x6/iqHnjutVH1+qss2E53HiLgEOA+4qPoGf54BngsjkZmHMvN/MvOHwMd7jDvp+dsC/Abw6V7bjGv+enTKWJ6DR1WBV+fMPgk8lJkf6bHNT1XbERGvYnWO/ntM+Y6LiOOfu83qH7vu79jsRuB3qlejvBo4vOZXtXHpeeQzyflb40bgub/oXwx8vss2XwLOjogTq1MEZ1fLRi4idgFXAG/OzO/12GaQ58Ko8q39m8qv9xh30pfSeCPwcGY+3m3luOZvnU4Zz3NwlH+h3WwfwOtZ/VXmPuCe6uMc4J3AO6ttLgMeYPWv6ncCrx1jvpdW495bZXhvtXxtvmD1P9J4DFgC2mOew+NYLeRta5ZNbP5Y/UHyBPADVs8hXgr8BHAb8AjwT8BJ1bZt4BNr9n0H8Gj18fYx5nuU1XOfzz0HP1Zt+9PAF9Z7Lowp399Vz637WC2iUzrzVffPYfVVF4+NM1+1/OrnnnNrtp3E/PXqlLE8B30rvSQV6qg6hSJJP0oscEkqlAUuSYWywCWpUBa4JBXKApekQlngklSo/wU5E9DtXFgcTwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "df['SearchMetrics.click.result.rank'].hist()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "How many users are in the dataset?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "10"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['source.user.id'].nunique()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "How many of each event type?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "SearchMetrics.click    84\n",
       "SearchMetrics.query    32\n",
       "SearchMetrics.page     12\n",
       "Name: event.action, dtype: int64"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['event.action'].value_counts()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Split dataset into two dataframes based on action type."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_queries = df[df['event.action'] == 'SearchMetrics.query']\n",
    "df_pages = df[df['event.action'] == 'SearchMetrics.page']\n",
    "df_clicks = df[df['event.action'] == 'SearchMetrics.click']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "What is the distribution of search result sizes in query events?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[<matplotlib.axes._subplots.AxesSubplot object at 0x120e33e50>]],\n",
       "      dtype=object)"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlAAAAE/CAYAAACJqP1XAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAXfklEQVR4nO3df7RlZ1kf8O9jQkVnaH40cEkgZdJC44rpAsogVpDOiD8GtQ12IcKyGAQ7sJZB7KLiGNuKutC0tSKKrQsBk5YfU4soNEGBFR2QatEZRBKIiEJiMk4IIZBkUgWCT/84e/ByuXfmvjP3zjmZfD5r3TXn7L3P+z7nPJO53+x3n3OquwMAwPp92bwLAAC4rxGgAAAGCVAAAIMEKACAQQIUAMAgAQoAYJAABXyJqtpRVbfMu44kqaqvr6oPz7uOUVW1raq6qk7fxDkur6pXb9b4wNoEKFhAVfWkqvq9qrqzqu6oqv9TVY+fd11HVNWVUzi4ZMX2l0/bn7POcbqqHnm0Y7r7d7v7whModyFU1b6q+r6NHLO7f6q7N3RMYH0EKFgwVfV3k1yd5BeSnJ3kYUl+PMlnNnieEz0z8qdJvmfFeM9I8ucnOO4XbObZm5M5B3DqEaBg8fyjJOnuN3b357v7r7r7Hd39gSSpqudW1Q1V9amqentVPeLIA6vqFVV1c1XdVVUHqurrl+17aVW9qapeV1V3JXlOVZ1dVb9SVX85jfcbywupqhdX1W1VdaiqvndFnf87yZOq6qzp/q4kH0hy64oxVq23qt49HfLHVXW4qr7ryNJhVf1wVd2a5FdWLidW1flV9eaq+kRVfbKqXjltf2RVvWs6a3d7Vf3P1V7cNeb4sqraU1V/Po35q1V19nT8A6fX7JNV9emq+sOqWpr23VhV37jiNX7dKnO+LMnXJ3nl9FxfWTMvn17fu6rquqq6eI2af7iqDlbV3VX14ap6ysr5pjEPL/u5t6peOu07r6p+bXrNPlZVP7DaPMD6CVCweP40yeer6qqqeuqygJJpyezyJP8yyYOT/G6SNy577B8meUxmZ67ekOR/VdUDl+2/JMmbkpyZ5PVJ/keSr0zy1UkekuTly459aJIzMjsD9rwkv7i8liR/neQtSZ453f+eJP99+RM5Wr3d/eTpsEd399buPhJ4HjrV/4gku1eMd1pmZ+duSrJtqm3vtPsnk7wjyVlJHp7ZGby1rJzjhUmeluSfJTkvyaeS/OJ07KXT63B+kr+X5AVJ/uooY3+J7v7R6blfNj3Xy5J8c5InZxaYz8js7N0nVz62qi5MclmSx3f3g5J8S5IbV5njyNhbkzxpeg5vqaovyyzs/nFmr9dTkvxgVX3LyHMAvpgABQumu+/K7BdgJ/nlJJ+oqrdOZz1ekOSnu/uG7r43yU8lecyRszrd/bru/mR339vd/yXJlydZfv3Q73f3b3T332QWop6a5AXd/anu/lx3v2vZsZ9L8hPT9rclObxirGQWmL6nqs7MLHz8xor9R613DX+T5Me6+zPdvTKofE1mAeeHuvue7v7r7n7PsnofkeS8FdvXM8cLkvxod9/S3Z9J8tIkT5+W9z6XWXB65HRG8MDUoxP1uSQPSvJVSWp6jQ6tctznM+vjRVX1gO6+sbvXXCatqgdn1ocXdvcfJXl8kgd3909092e7+6OZ/b165lpjAMcmQMECmn6ZPqe7H57k4sxCw89lFhBeMS0lfTrJHUkqszMLqap/Oy2X3TntPyPJOcuGvnnZ7fOT3NHdn1qjjE9OoeeI/5dk64o635PZmaUfTXL1KoHnqPWu4RPd/ddr7Ds/yU0r6jriJdPYf1BVH6yq5w7M8Ygkv76szhsyCy5LmZ2le3uSvdNS53+qqgccZex16e7fTvLKzM503VZVr6rZ9W8rj/uzJD+YWai7rar2VtV5q4051fWmJG/o7iNn5h6R5Lwjz216fpdPzw04TgIULLju/pMkV2YWpG5O8vzuPnPZz1d09+/V7Hqnl2S2FHRWd5+Z5M7MQsUXhlt2++YkZ09nj07E65K8OCuW75bNsWq9Rxmvj7Lv5iR/v1a58Lu7b+3uf93d5yV5fpL/Wmu/w2/lHDcneeqKOh/Y3QenM3A/3t0XJfm6JN+ev714/p7MlkCPeOjI8+run+/uxyW5KLOlvB9a9YHdb+juJ2UWhjrJf1xjjl9IcleSf7fiuX1sxXN7UHd/61FqBY5BgIIFU1VfNV28/fDp/vlJnpXk/yb5pSQ/UlVfPe07o6q+c3rog5Lcm+QTSU6vqv+Q5EvOaBwxLRf9ZmZB46yqekBVPXmt44/i55N8U5J3r7LvaPUmyceT/IOBuf4gyaEkV1TVlukC7ydOY3/nkdcss+t/OrOluvX4pSQvq7+9wP3B0/VbqaqdVfWPp+uv7sps6e3IuO9P8szptdue5OlHmeOLnmtVPb6qnjCdNbons2vKvqTeqrqwqr6hqr58Ouav1jju+Zkto373tER7xB8kuXu6EP0rquq0qrq4FuhjMeC+SICCxXN3kickeW9V3ZNZcLo+yYu7+9czO/uwt2bvpLs+s+uYktky029ldhH6TZn9sr05R/fszALBnyS5LbOloiHdfUd3X9vdq51hOVq9yWxZ6qppaekZ65jr80n+eZJHJvmLJLck+a5p9+Mze80OJ3lrkhdN1/tkWtL77qMM/YrpMe+oqrsze82fMO17aGbLYndltrT3rsyW9ZLk3yf5h5kFth/P7ML9o83x9Jq9G/HnMwu3vzw99qbMLiD/z1O9l1fVb06P+/IkVyS5PbN3OD4kyY+sMv6zMgtof7nsnXiXT6/Zt2f25oKPTeO8OrPlXeA41Sr/5gEAcBTOQAEADBKgAAAGCVAAAIMEKACAQQIUAMCgk/ot5Oecc05v27ZtU+e45557smXLlk2dg3H6snj0ZDHpy+LRk8V0Mvpy4MCB27v7wavtO6kBatu2bdm/f/+mzrFv377s2LFjU+dgnL4sHj1ZTPqyePRkMZ2MvlTVTWvts4QHADBIgAIAGCRAAQAMEqAAAAYJUAAAgwQoAIBBAhQAwCABCgBgkAAFADBIgAIAGCRAAQAMOqnfhQcAzM+2PdfMu4QNc+Wu+X7BszNQAACDBCgAgEECFADAIAEKAGCQAAUAMEiAAgAYJEABAAwSoAAABglQAACDBCgAgEECFADAIAEKAGCQAAUAMEiAAgAYdMwAVVXnV9XvVNWHquqDVfWiaftLq+pgVb1/+vnWzS8XAGD+Tl/HMfcmeXF3v6+qHpTkQFW9c9r38u7+mc0rDwBg8RwzQHX3oSSHptt3V9UNSR622YUBACyqoWugqmpbkscmee+06bKq+kBVvbaqztrg2gAAFlJ19/oOrNqa5F1JXtbdb66qpSS3J+kkP5nk3O5+7iqP251kd5IsLS09bu/evRtV+6oOHz6crVu3buocjNOXxaMni0lfFs+p1JPrDt457xI2zAVnnLbpfdm5c+eB7t6+2r51BaiqekCSq5O8vbt/dpX925Jc3d0XH22c7du39/79+9dT83Hbt29fduzYsalzME5fFo+eLCZ9WTynUk+27blm3iVsmCt3bdn0vlTVmgFqPe/CqySvSXLD8vBUVecuO+w7klx/ooUCANwXrOddeE9M8uwk11XV+6dtlyd5VlU9JrMlvBuTPH9TKgQAWDDreRfee5LUKrvetvHlAAAsPp9EDgAwSIACABgkQAEADBKgAAAGCVAAAIMEKACAQQIUAMAgAQoAYJAABQAwSIACABgkQAEADBKgAAAGCVAAAIMEKACAQQIUAMAgAQoAYJAABQAwSIACABgkQAEADBKgAAAGCVAAAIMEKACAQQIUAMAgAQoAYJAABQAwSIACABgkQAEADBKgAAAGCVAAAIMEKACAQQIUAMAgAQoAYJAABQAwSIACABgkQAEADBKgAAAGCVAAAIMEKACAQQIUAMCgYwaoqjq/qn6nqj5UVR+sqhdN28+uqndW1UemP8/a/HIBAOZvPWeg7k3y4u6+KMnXJvn+qrooyZ4k13b3o5JcO90HADjlHTNAdfeh7n7fdPvuJDckeViSS5JcNR12VZKnbVaRAACLZOgaqKraluSxSd6bZKm7D027bk2ytKGVAQAsqOru9R1YtTXJu5K8rLvfXFWf7u4zl+3/VHd/yXVQVbU7ye4kWVpaetzevXs3pvI1HD58OFu3bt3UORinL4tHTxaTviyeU6kn1x28c94lbJgLzjht0/uyc+fOA929fbV96wpQVfWAJFcneXt3/+y07cNJdnT3oao6N8m+7r7waONs37699+/fP/wERuzbty87duzY1DkYpy+LR08Wk74snlOpJ9v2XDPvEjbMlbu2bHpfqmrNALWed+FVktckueFIeJq8Ncml0+1Lk7zlRAsFALgvOH0dxzwxybOTXFdV75+2XZ7kiiS/WlXPS3JTkmdsTokAAIvlmAGqu9+TpNbY/ZSNLQcAYPH5JHIAgEECFADAIAEKAGCQAAUAMEiAAgAYJEABAAwSoAAABglQAACDBCgAgEECFADAIAEKAGCQAAUAMEiAAgAYJEABAAwSoAAABglQAACDBCgAgEECFADAIAEKAGCQAAUAMEiAAgAYJEABAAwSoAAABglQAACDBCgAgEECFADAIAEKAGCQAAUAMEiAAgAYJEABAAwSoAAABglQAACDBCgAgEECFADAIAEKAGCQAAUAMEiAAgAYJEABAAwSoAAABh0zQFXVa6vqtqq6ftm2l1bVwap6//TzrZtbJgDA4ljPGagrk+xaZfvLu/sx08/bNrYsAIDFdcwA1d3vTnLHSagFAOA+4USugbqsqj4wLfGdtWEVAQAsuOruYx9UtS3J1d198XR/KcntSTrJTyY5t7ufu8ZjdyfZnSRLS0uP27t374YUvpbDhw9n69atmzoH4/Rl8ejJYtKXxXMq9eS6g3fOu4QNc8EZp216X3bu3Hmgu7evtu+4AtR69620ffv23r9//zHnOxH79u3Ljh07NnUOxunL4tGTxaQvi+dU6sm2PdfMu4QNc+WuLZvel6paM0Ad1xJeVZ277O53JLl+rWMBAE41px/rgKp6Y5IdSc6pqluS/FiSHVX1mMyW8G5M8vxNrBEAYKEcM0B197NW2fyaTagFAOA+wSeRAwAMEqAAAAYJUAAAgwQoAIBBAhQAwCABCgBgkAAFADBIgAIAGCRAAQAMEqAAAAYJUAAAgwQoAIBBAhQAwCABCgBgkAAFADBIgAIAGCRAAQAMEqAAAAYJUAAAgwQoAIBBAhQAwCABCgBgkAAFADBIgAIAGCRAAQAMEqAAAAYJUAAAgwQoAIBBAhQAwCABCgBgkAAFADBIgAIAGCRAAQAMEqAAAAYJUAAAgwQoAIBBAhQAwCABCgBgkAAFADDomAGqql5bVbdV1fXLtp1dVe+sqo9Mf561uWUCACyO9ZyBujLJrhXb9iS5trsfleTa6T4AwP3CMQNUd787yR0rNl+S5Krp9lVJnrbBdQEALKzjvQZqqbsPTbdvTbK0QfUAACy86u5jH1S1LcnV3X3xdP/T3X3msv2f6u5Vr4Oqqt1JdifJ0tLS4/bu3bsBZa/t8OHD2bp166bOwTh9WTx6spj0ZfGcSj257uCd8y5hw1xwxmmb3pedO3ce6O7tq+07/TjH/HhVndvdh6rq3CS3rXVgd78qyauSZPv27b1jx47jnHJ99u3bl82eg3H6snj0ZDHpy+I5lXrynD3XzLuEDXPlri1z7cvxLuG9Ncml0+1Lk7xlY8oBAFh86/kYgzcm+f0kF1bVLVX1vCRXJPmmqvpIkm+c7gMA3C8ccwmvu5+1xq6nbHAtAAD3CT6JHABgkAAFADBIgAIAGCRAAQAMEqAAAAYJUAAAgwQoAIBBAhQAwCABCgBgkAAFADBIgAIAGCRAAQAMEqAAAAYJUAAAgwQoAIBBAhQAwCABCgBgkAAFADBIgAIAGCRAAQAMEqAAAAYJUAAAgwQoAIBBAhQAwCABCgBgkAAFADBIgAIAGCRAAQAMEqAAAAYJUAAAgwQoAIBBAhQAwCABCgBgkAAFADBIgAIAGCRAAQAMEqAAAAYJUAAAgwQoAIBBp5/Ig6vqxiR3J/l8knu7e/tGFAUAsMhOKEBNdnb37RswDgDAfYIlPACAQScaoDrJO6rqQFXt3oiCAAAWXXX38T+46mHdfbCqHpLknUle2N3vXnHM7iS7k2Rpaelxe/fuPZF6j+nw4cPZunXrps7BOH1ZPHqymPRl8ZxKPbnu4J3zLmHDXHDGaZvel507dx5Y6/ruEwpQXzRQ1UuTHO7un1nrmO3bt/f+/fs3ZL617Nu3Lzt27NjUORinL4tHTxaTviyeU6kn2/ZcM+8SNsyVu7Zsel+qas0AddxLeFW1paoedOR2km9Ocv3xjgcAcF9xIu/CW0ry61V1ZJw3dPdvbUhVAAAL7LgDVHd/NMmjN7AWAID7BB9jAAAwSIACABgkQAEADBKgAAAGCVAAAIMEKACAQQIUAMAgAQoAYJAABQAwSIACABgkQAEADBKgAAAGCVAAAIMEKACAQafPu4CNdt3BO/OcPdfMu4wNceMV3zbvEgCAVTgDBQAwSIACABgkQAEADBKgAAAGCVAAAIMEKACAQQIUAMAgAQoAYJAABQAwSIACABgkQAEADBKgAAAGCVAAAIMEKACAQQIUAMAgAQoAYJAABQAwSIACABh0+rwLgPuSbXuumXcJG+bKXVvmXQKruO7gnXnOKfD37MYrvm3eJcCmcgYKAGCQAAUAMEiAAgAYJEABAAwSoAAABp1QgKqqXVX14ar6s6ras1FFAQAssuMOUFV1WpJfTPLUJBcleVZVXbRRhQEALKoTOQP1NUn+rLs/2t2fTbI3ySUbUxYAwOI6kQD1sCQ3L7t/y7QNAOCUVt19fA+senqSXd39fdP9Zyd5QndftuK43Ul2T3cvTPLh4y93Xc5Jcvsmz8E4fVk8erKY9GXx6MliOhl9eUR3P3i1HSfyVS4Hk5y/7P7Dp21fpLtfleRVJzDPkKra393bT9Z8rI++LB49WUz6snj0ZDHNuy8nsoT3h0keVVUXVNXfSfLMJG/dmLIAABbXcZ+B6u57q+qyJG9PclqS13b3BzesMgCABXUiS3jp7rcledsG1bJRTtpyIUP0ZfHoyWLSl8WjJ4tprn057ovIAQDur3yVCwDAoFMqQPlqmcVSVedX1e9U1Yeq6oNV9aJ518TfqqrTquqPqurqeddCUlVnVtWbqupPquqGqvqn866JpKr+zfTv1/VV9caqeuC8a7q/qarXVtVtVXX9sm1nV9U7q+oj059nney6TpkA5atlFtK9SV7c3Rcl+dok368nC+VFSW6YdxF8wSuS/FZ3f1WSR0dv5q6qHpbkB5Js7+6LM3vD1DPnW9X90pVJdq3YtifJtd39qCTXTvdPqlMmQMVXyyyc7j7U3e+bbt+d2S8En1a/AKrq4Um+Lcmr510LSVWdkeTJSV6TJN392e7+9HyrYnJ6kq+oqtOTfGWSv5xzPfc73f3uJHes2HxJkqum21cledpJLSqnVoDy1TILrKq2JXlskvfOtxImP5fkJUn+Zt6FkCS5IMknkvzKtKz66qraMu+i7u+6+2CSn0nyF0kOJbmzu98x36qYLHX3oen2rUmWTnYBp1KAYkFV1dYkv5bkB7v7rnnXc39XVd+e5LbuPjDvWviC05P8kyT/rbsfm+SezGFJgi82XVdzSWYB97wkW6rqX823Klbq2ccJnPSPFDiVAtS6vlqGk6uqHpBZeHp9d7953vWQJHlikn9RVTdmttT9DVX1uvmWdL93S5JbuvvIGdo3ZRaomK9vTPKx7v5Ed38uyZuTfN2ca2Lm41V1bpJMf952sgs4lQKUr5ZZMFVVmV3TcUN3/+y862Gmu3+kux/e3dsy++/kt7vb/1XPUXffmuTmqrpw2vSUJB+aY0nM/EWSr62qr5z+PXtKXNy/KN6a5NLp9qVJ3nKyCzihTyJfJL5aZiE9Mcmzk1xXVe+ftl0+fYI98MVemOT10/8AfjTJ9865nvu97n5vVb0pyfsye1fxH8Wnkp90VfXGJDuSnFNVtyT5sSRXJPnVqnpekpuSPOOk1+WTyAEAxpxKS3gAACeFAAUAMEiAAgAYJEABAAwSoAAABglQAACDBCgAgEECFADAoP8PP1CK9QlS2k8AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 720x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "df_queries[['SearchMetrics.results.size']].hist(figsize=[10,5], bins=10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Metrics Index\n",
    "\n",
    "The `ecs-search-metrics_transform_queryid` index is used to store per-query metrics."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_tf_query = el.read_es(ES_URL, 'ecs-search-metrics_transform_queryid')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>SearchMetrics.query.id</th>\n",
       "      <th>metrics.clicks.count</th>\n",
       "      <th>metrics.clicks.exist_at_10</th>\n",
       "      <th>metrics.clicks.exist_at_3</th>\n",
       "      <th>metrics.clicks.max_page_clicked</th>\n",
       "      <th>metrics.clicks.max_reciprocal_rank</th>\n",
       "      <th>metrics.clicks.mean_reciprocal_rank</th>\n",
       "      <th>metrics.clicks.num_above_fold</th>\n",
       "      <th>metrics.clicks.num_below_fold</th>\n",
       "      <th>metrics.clicks.time_to_first_click</th>\n",
       "      <th>...</th>\n",
       "      <th>query_event.SearchMetricsSimulation.ab.variant</th>\n",
       "      <th>query_event.SearchMetricsSimulation.page_name</th>\n",
       "      <th>query_event.event.action</th>\n",
       "      <th>query_event.event.dataset</th>\n",
       "      <th>query_event.event.duration</th>\n",
       "      <th>query_event.event.id</th>\n",
       "      <th>query_event.source.geo.city_name</th>\n",
       "      <th>query_event.source.geo.country_iso_code</th>\n",
       "      <th>query_event.source.geo.location</th>\n",
       "      <th>query_event.source.user.id</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>MIOMlGA6bpeYgWvvLXEuaqgAAAAAAAAA</th>\n",
       "      <td>065ef3cb-4e2d-422e-8459-2b0a17353cca</td>\n",
       "      <td>7.0</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>2.0</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.145088</td>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "      <td>14000.0</td>\n",
       "      <td>...</td>\n",
       "      <td>a</td>\n",
       "      <td>user_search_page</td>\n",
       "      <td>SearchMetrics.query</td>\n",
       "      <td>SearchMetrics.query</td>\n",
       "      <td>186000000</td>\n",
       "      <td>065ef3cb-4e2d-422e-8459-2b0a17353cca</td>\n",
       "      <td>Roi Et</td>\n",
       "      <td>TH</td>\n",
       "      <td>16.0567,103.65309</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>MBho1dYeVG3gUCDt7i7yJqQAAAAAAAAA</th>\n",
       "      <td>04f65713-25d6-4b3c-9d03-89527e61a5c2</td>\n",
       "      <td>0.0</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>a</td>\n",
       "      <td>user_search_page</td>\n",
       "      <td>SearchMetrics.query</td>\n",
       "      <td>SearchMetrics.query</td>\n",
       "      <td>259000000</td>\n",
       "      <td>04f65713-25d6-4b3c-9d03-89527e61a5c2</td>\n",
       "      <td>Bua Yai</td>\n",
       "      <td>TH</td>\n",
       "      <td>15.58552,102.42587</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>MfqN0amSAXcx9yIiEMtz0vAAAAAAAAAA</th>\n",
       "      <td>1b84bb80-2104-4155-89c6-d7c525d1d24b</td>\n",
       "      <td>0.0</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>control</td>\n",
       "      <td>user_search_page</td>\n",
       "      <td>SearchMetrics.query</td>\n",
       "      <td>SearchMetrics.query</td>\n",
       "      <td>48000000</td>\n",
       "      <td>1b84bb80-2104-4155-89c6-d7c525d1d24b</td>\n",
       "      <td>Karbala</td>\n",
       "      <td>IQ</td>\n",
       "      <td>32.61603,44.02488</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>MTEjDeSBb2BdFmpQc3RPCwEAAAAAAAAA</th>\n",
       "      <td>19e4da1c-8910-43c4-a9e1-34b4686efdea</td>\n",
       "      <td>2.0</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>33000.0</td>\n",
       "      <td>...</td>\n",
       "      <td>control</td>\n",
       "      <td>user_search_page</td>\n",
       "      <td>SearchMetrics.query</td>\n",
       "      <td>SearchMetrics.query</td>\n",
       "      <td>236000000</td>\n",
       "      <td>19e4da1c-8910-43c4-a9e1-34b4686efdea</td>\n",
       "      <td>Al Jubayl</td>\n",
       "      <td>SA</td>\n",
       "      <td>27.0174,49.62251</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>MkU4hXtof9W_dNgWe3FuqBgAAAAAAAAA</th>\n",
       "      <td>22450eda-064d-4951-8d9c-d259200376bd</td>\n",
       "      <td>0.0</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>none</td>\n",
       "      <td>user_search_page</td>\n",
       "      <td>SearchMetrics.query</td>\n",
       "      <td>SearchMetrics.query</td>\n",
       "      <td>274000000</td>\n",
       "      <td>22450eda-064d-4951-8d9c-d259200376bd</td>\n",
       "      <td>Karbala</td>\n",
       "      <td>IQ</td>\n",
       "      <td>32.61603,44.02488</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>\n",
       "<p>5 rows × 30 columns</p>"
      ],
      "text/plain": [
       "                                                SearchMetrics.query.id  \\\n",
       "MIOMlGA6bpeYgWvvLXEuaqgAAAAAAAAA  065ef3cb-4e2d-422e-8459-2b0a17353cca   \n",
       "MBho1dYeVG3gUCDt7i7yJqQAAAAAAAAA  04f65713-25d6-4b3c-9d03-89527e61a5c2   \n",
       "MfqN0amSAXcx9yIiEMtz0vAAAAAAAAAA  1b84bb80-2104-4155-89c6-d7c525d1d24b   \n",
       "MTEjDeSBb2BdFmpQc3RPCwEAAAAAAAAA  19e4da1c-8910-43c4-a9e1-34b4686efdea   \n",
       "MkU4hXtof9W_dNgWe3FuqBgAAAAAAAAA  22450eda-064d-4951-8d9c-d259200376bd   \n",
       "\n",
       "                                  metrics.clicks.count  \\\n",
       "MIOMlGA6bpeYgWvvLXEuaqgAAAAAAAAA                   7.0   \n",
       "MBho1dYeVG3gUCDt7i7yJqQAAAAAAAAA                   0.0   \n",
       "MfqN0amSAXcx9yIiEMtz0vAAAAAAAAAA                   0.0   \n",
       "MTEjDeSBb2BdFmpQc3RPCwEAAAAAAAAA                   2.0   \n",
       "MkU4hXtof9W_dNgWe3FuqBgAAAAAAAAA                   0.0   \n",
       "\n",
       "                                  metrics.clicks.exist_at_10  \\\n",
       "MIOMlGA6bpeYgWvvLXEuaqgAAAAAAAAA                        True   \n",
       "MBho1dYeVG3gUCDt7i7yJqQAAAAAAAAA                       False   \n",
       "MfqN0amSAXcx9yIiEMtz0vAAAAAAAAAA                       False   \n",
       "MTEjDeSBb2BdFmpQc3RPCwEAAAAAAAAA                        True   \n",
       "MkU4hXtof9W_dNgWe3FuqBgAAAAAAAAA                       False   \n",
       "\n",
       "                                  metrics.clicks.exist_at_3  \\\n",
       "MIOMlGA6bpeYgWvvLXEuaqgAAAAAAAAA                       True   \n",
       "MBho1dYeVG3gUCDt7i7yJqQAAAAAAAAA                      False   \n",
       "MfqN0amSAXcx9yIiEMtz0vAAAAAAAAAA                      False   \n",
       "MTEjDeSBb2BdFmpQc3RPCwEAAAAAAAAA                       True   \n",
       "MkU4hXtof9W_dNgWe3FuqBgAAAAAAAAA                      False   \n",
       "\n",
       "                                  metrics.clicks.max_page_clicked  \\\n",
       "MIOMlGA6bpeYgWvvLXEuaqgAAAAAAAAA                              2.0   \n",
       "MBho1dYeVG3gUCDt7i7yJqQAAAAAAAAA                              NaN   \n",
       "MfqN0amSAXcx9yIiEMtz0vAAAAAAAAAA                              NaN   \n",
       "MTEjDeSBb2BdFmpQc3RPCwEAAAAAAAAA                              1.0   \n",
       "MkU4hXtof9W_dNgWe3FuqBgAAAAAAAAA                              NaN   \n",
       "\n",
       "                                  metrics.clicks.max_reciprocal_rank  \\\n",
       "MIOMlGA6bpeYgWvvLXEuaqgAAAAAAAAA                                 0.5   \n",
       "MBho1dYeVG3gUCDt7i7yJqQAAAAAAAAA                                 NaN   \n",
       "MfqN0amSAXcx9yIiEMtz0vAAAAAAAAAA                                 NaN   \n",
       "MTEjDeSBb2BdFmpQc3RPCwEAAAAAAAAA                                 0.5   \n",
       "MkU4hXtof9W_dNgWe3FuqBgAAAAAAAAA                                 NaN   \n",
       "\n",
       "                                  metrics.clicks.mean_reciprocal_rank  \\\n",
       "MIOMlGA6bpeYgWvvLXEuaqgAAAAAAAAA                             0.145088   \n",
       "MBho1dYeVG3gUCDt7i7yJqQAAAAAAAAA                                  NaN   \n",
       "MfqN0amSAXcx9yIiEMtz0vAAAAAAAAAA                                  NaN   \n",
       "MTEjDeSBb2BdFmpQc3RPCwEAAAAAAAAA                             0.333333   \n",
       "MkU4hXtof9W_dNgWe3FuqBgAAAAAAAAA                                  NaN   \n",
       "\n",
       "                                  metrics.clicks.num_above_fold  \\\n",
       "MIOMlGA6bpeYgWvvLXEuaqgAAAAAAAAA                              3   \n",
       "MBho1dYeVG3gUCDt7i7yJqQAAAAAAAAA                              0   \n",
       "MfqN0amSAXcx9yIiEMtz0vAAAAAAAAAA                              0   \n",
       "MTEjDeSBb2BdFmpQc3RPCwEAAAAAAAAA                              2   \n",
       "MkU4hXtof9W_dNgWe3FuqBgAAAAAAAAA                              0   \n",
       "\n",
       "                                  metrics.clicks.num_below_fold  \\\n",
       "MIOMlGA6bpeYgWvvLXEuaqgAAAAAAAAA                              4   \n",
       "MBho1dYeVG3gUCDt7i7yJqQAAAAAAAAA                              0   \n",
       "MfqN0amSAXcx9yIiEMtz0vAAAAAAAAAA                              0   \n",
       "MTEjDeSBb2BdFmpQc3RPCwEAAAAAAAAA                              0   \n",
       "MkU4hXtof9W_dNgWe3FuqBgAAAAAAAAA                              0   \n",
       "\n",
       "                                  metrics.clicks.time_to_first_click  ...  \\\n",
       "MIOMlGA6bpeYgWvvLXEuaqgAAAAAAAAA                             14000.0  ...   \n",
       "MBho1dYeVG3gUCDt7i7yJqQAAAAAAAAA                                 NaN  ...   \n",
       "MfqN0amSAXcx9yIiEMtz0vAAAAAAAAAA                                 NaN  ...   \n",
       "MTEjDeSBb2BdFmpQc3RPCwEAAAAAAAAA                             33000.0  ...   \n",
       "MkU4hXtof9W_dNgWe3FuqBgAAAAAAAAA                                 NaN  ...   \n",
       "\n",
       "                                  query_event.SearchMetricsSimulation.ab.variant  \\\n",
       "MIOMlGA6bpeYgWvvLXEuaqgAAAAAAAAA                                               a   \n",
       "MBho1dYeVG3gUCDt7i7yJqQAAAAAAAAA                                               a   \n",
       "MfqN0amSAXcx9yIiEMtz0vAAAAAAAAAA                                         control   \n",
       "MTEjDeSBb2BdFmpQc3RPCwEAAAAAAAAA                                         control   \n",
       "MkU4hXtof9W_dNgWe3FuqBgAAAAAAAAA                                            none   \n",
       "\n",
       "                                  query_event.SearchMetricsSimulation.page_name  \\\n",
       "MIOMlGA6bpeYgWvvLXEuaqgAAAAAAAAA                               user_search_page   \n",
       "MBho1dYeVG3gUCDt7i7yJqQAAAAAAAAA                               user_search_page   \n",
       "MfqN0amSAXcx9yIiEMtz0vAAAAAAAAAA                               user_search_page   \n",
       "MTEjDeSBb2BdFmpQc3RPCwEAAAAAAAAA                               user_search_page   \n",
       "MkU4hXtof9W_dNgWe3FuqBgAAAAAAAAA                               user_search_page   \n",
       "\n",
       "                                 query_event.event.action  \\\n",
       "MIOMlGA6bpeYgWvvLXEuaqgAAAAAAAAA      SearchMetrics.query   \n",
       "MBho1dYeVG3gUCDt7i7yJqQAAAAAAAAA      SearchMetrics.query   \n",
       "MfqN0amSAXcx9yIiEMtz0vAAAAAAAAAA      SearchMetrics.query   \n",
       "MTEjDeSBb2BdFmpQc3RPCwEAAAAAAAAA      SearchMetrics.query   \n",
       "MkU4hXtof9W_dNgWe3FuqBgAAAAAAAAA      SearchMetrics.query   \n",
       "\n",
       "                                 query_event.event.dataset  \\\n",
       "MIOMlGA6bpeYgWvvLXEuaqgAAAAAAAAA       SearchMetrics.query   \n",
       "MBho1dYeVG3gUCDt7i7yJqQAAAAAAAAA       SearchMetrics.query   \n",
       "MfqN0amSAXcx9yIiEMtz0vAAAAAAAAAA       SearchMetrics.query   \n",
       "MTEjDeSBb2BdFmpQc3RPCwEAAAAAAAAA       SearchMetrics.query   \n",
       "MkU4hXtof9W_dNgWe3FuqBgAAAAAAAAA       SearchMetrics.query   \n",
       "\n",
       "                                  query_event.event.duration  \\\n",
       "MIOMlGA6bpeYgWvvLXEuaqgAAAAAAAAA                   186000000   \n",
       "MBho1dYeVG3gUCDt7i7yJqQAAAAAAAAA                   259000000   \n",
       "MfqN0amSAXcx9yIiEMtz0vAAAAAAAAAA                    48000000   \n",
       "MTEjDeSBb2BdFmpQc3RPCwEAAAAAAAAA                   236000000   \n",
       "MkU4hXtof9W_dNgWe3FuqBgAAAAAAAAA                   274000000   \n",
       "\n",
       "                                                  query_event.event.id  \\\n",
       "MIOMlGA6bpeYgWvvLXEuaqgAAAAAAAAA  065ef3cb-4e2d-422e-8459-2b0a17353cca   \n",
       "MBho1dYeVG3gUCDt7i7yJqQAAAAAAAAA  04f65713-25d6-4b3c-9d03-89527e61a5c2   \n",
       "MfqN0amSAXcx9yIiEMtz0vAAAAAAAAAA  1b84bb80-2104-4155-89c6-d7c525d1d24b   \n",
       "MTEjDeSBb2BdFmpQc3RPCwEAAAAAAAAA  19e4da1c-8910-43c4-a9e1-34b4686efdea   \n",
       "MkU4hXtof9W_dNgWe3FuqBgAAAAAAAAA  22450eda-064d-4951-8d9c-d259200376bd   \n",
       "\n",
       "                                 query_event.source.geo.city_name  \\\n",
       "MIOMlGA6bpeYgWvvLXEuaqgAAAAAAAAA                           Roi Et   \n",
       "MBho1dYeVG3gUCDt7i7yJqQAAAAAAAAA                          Bua Yai   \n",
       "MfqN0amSAXcx9yIiEMtz0vAAAAAAAAAA                          Karbala   \n",
       "MTEjDeSBb2BdFmpQc3RPCwEAAAAAAAAA                        Al Jubayl   \n",
       "MkU4hXtof9W_dNgWe3FuqBgAAAAAAAAA                          Karbala   \n",
       "\n",
       "                                  query_event.source.geo.country_iso_code  \\\n",
       "MIOMlGA6bpeYgWvvLXEuaqgAAAAAAAAA                                       TH   \n",
       "MBho1dYeVG3gUCDt7i7yJqQAAAAAAAAA                                       TH   \n",
       "MfqN0amSAXcx9yIiEMtz0vAAAAAAAAAA                                       IQ   \n",
       "MTEjDeSBb2BdFmpQc3RPCwEAAAAAAAAA                                       SA   \n",
       "MkU4hXtof9W_dNgWe3FuqBgAAAAAAAAA                                       IQ   \n",
       "\n",
       "                                  query_event.source.geo.location  \\\n",
       "MIOMlGA6bpeYgWvvLXEuaqgAAAAAAAAA                16.0567,103.65309   \n",
       "MBho1dYeVG3gUCDt7i7yJqQAAAAAAAAA               15.58552,102.42587   \n",
       "MfqN0amSAXcx9yIiEMtz0vAAAAAAAAAA                32.61603,44.02488   \n",
       "MTEjDeSBb2BdFmpQc3RPCwEAAAAAAAAA                 27.0174,49.62251   \n",
       "MkU4hXtof9W_dNgWe3FuqBgAAAAAAAAA                32.61603,44.02488   \n",
       "\n",
       "                                 query_event.source.user.id  \n",
       "MIOMlGA6bpeYgWvvLXEuaqgAAAAAAAAA                          5  \n",
       "MBho1dYeVG3gUCDt7i7yJqQAAAAAAAAA                          5  \n",
       "MfqN0amSAXcx9yIiEMtz0vAAAAAAAAAA                          1  \n",
       "MTEjDeSBb2BdFmpQc3RPCwEAAAAAAAAA                          7  \n",
       "MkU4hXtof9W_dNgWe3FuqBgAAAAAAAAA                          4  \n",
       "\n",
       "[5 rows x 30 columns]"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_tf_query.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "What are the distributions of the numeric fields?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[<matplotlib.axes._subplots.AxesSubplot object at 0x120f59090>,\n",
       "        <matplotlib.axes._subplots.AxesSubplot object at 0x12106a210>,\n",
       "        <matplotlib.axes._subplots.AxesSubplot object at 0x12109d890>],\n",
       "       [<matplotlib.axes._subplots.AxesSubplot object at 0x1210cef10>,\n",
       "        <matplotlib.axes._subplots.AxesSubplot object at 0x1211125d0>,\n",
       "        <matplotlib.axes._subplots.AxesSubplot object at 0x11eb90390>],\n",
       "       [<matplotlib.axes._subplots.AxesSubplot object at 0x120f42710>,\n",
       "        <matplotlib.axes._subplots.AxesSubplot object at 0x12113efd0>,\n",
       "        <matplotlib.axes._subplots.AxesSubplot object at 0x1211b1050>],\n",
       "       [<matplotlib.axes._subplots.AxesSubplot object at 0x1211e57d0>,\n",
       "        <matplotlib.axes._subplots.AxesSubplot object at 0x12125f410>,\n",
       "        <matplotlib.axes._subplots.AxesSubplot object at 0x121295a90>]],\n",
       "      dtype=object)"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1224x792 with 12 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "df_tf_query.select_dtypes(include=[np.number])\\\n",
    "  .drop(['query_event.SearchMetrics.query.page'], axis=1)\\\n",
    "  .hist(figsize=[17,11], bins=10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Metrics\n",
    "\n",
    "We're going to start with some basic query metrics [1] (no session metrics):\n",
    "\n",
    "* Zero Result Rate: The fraction of queries for which no results were returned.\n",
    "* Abandonment Rate^: The fraction of queries for which no results were clicked on.\n",
    "* Clicks per Query^: The mean number of results that are clicked for each query.\n",
    "* Max Reciprocal Rank^†: The mean value of *1/r*, where *r* is the rank of the highest ranked result clicked on.\n",
    "* Mean Reciprocal Rank^†: The mean value of *Σ 1/rᵢ*, summing over the ranks *rᵢ* of all clicks for each query.\n",
    "* Time to First Click^†: The mean time from query being issued until first click on any result.\n",
    "* Time to Last Click^†: The mean time from query being issued until last click on any result.\n",
    "\n",
    "^ When computing the metrics marked with ^, we exclude queries with no results to avoid conflating these measures with zero result rate.  \n",
    "† When computing the metrics marked with †, we exclude queries with no clicks to avoid conflating these measures with abandonment rate.\n",
    "\n",
    "[1] F. Radlinski, M. Kurup, T. Joachims. [*How Does Clickthrough Data Reflect Retrieval Quality?*](https://dl.acm.org/citation.cfm?id=1458092). CIKM '08, 2008."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Given the above definitions, build datasets to base metrics off of."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "# queries that have no results\n",
    "df_tf_query_without_results = df_tf_query[df_tf_query['query_event.SearchMetrics.results.size'] == 0]\n",
    "\n",
    "# queries that have results\n",
    "df_tf_query_with_results = df_tf_query[df_tf_query['query_event.SearchMetrics.results.size'] > 0]\n",
    "\n",
    "# queries that have results but no clicks\n",
    "df_tf_query_without_clicks = df_tf_query_with_results[df_tf_query_with_results['metrics.clicks.count'] == 0]\n",
    "\n",
    "# queries that have results and clicks\n",
    "df_tf_query_with_clicks = df_tf_query_with_results[df_tf_query_with_results['metrics.clicks.count'] > 0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Provide basic counts for all datasets."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "num_queries = df_tf_query.shape[0]\n",
    "num_queries_without_results = df_tf_query_without_results.shape[0]\n",
    "num_queries_with_results = df_tf_query_with_results.shape[0]\n",
    "num_queries_without_clicks = df_tf_query_without_clicks.shape[0]\n",
    "num_queries_with_clicks = df_tf_query_with_clicks.shape[0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Zero Result Rate\n",
    "\n",
    "Lower is better.  \n",
    "Best possible value: 0.0%"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Zero result rate: 9.38%\n"
     ]
    }
   ],
   "source": [
    "zero_result_rate = num_queries_without_results / num_queries * 100\n",
    "\n",
    "print(f\"Zero result rate: {round(zero_result_rate, 2)}%\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Abandonment Rate\n",
    "\n",
    "Lower is better.  \n",
    "Best possible value: 0.0%"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Abandonment rate: 12.5%\n"
     ]
    }
   ],
   "source": [
    "abandonment_rate = num_queries_without_clicks / num_queries * 100\n",
    "\n",
    "print(f\"Abandonment rate: {round(abandonment_rate, 2)}%\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Clicks per Query\n",
    "\n",
    "Lower is better.  \n",
    "Best possible value: 1.0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Clicks per Query: 2.9\n"
     ]
    }
   ],
   "source": [
    "mean_clicks_per_query = df_tf_query_with_results['metrics.clicks.count'].mean()\n",
    "\n",
    "print(f\"Clicks per Query: {round(mean_clicks_per_query, 2)}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Click Through Rate at Position 3 (CTR@3)\n",
    "\n",
    "Higher is better.  \n",
    "Best possible value: 1.0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CTR@3: 0.56\n"
     ]
    }
   ],
   "source": [
    "num_queries_with_clicks_at_3 = df_tf_query_with_clicks[df_tf_query_with_clicks['metrics.clicks.exist_at_3'] == True].shape[0]\n",
    "ctr_at_3 = num_queries_with_clicks_at_3 / num_queries_with_clicks\n",
    "\n",
    "print(f\"CTR@3: {round(ctr_at_3, 2)}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Max Reciprocal Rank\n",
    "\n",
    "Higher is better.  \n",
    "Best possible value: 1.0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Max Reciprocal Rank: 0.46\n"
     ]
    }
   ],
   "source": [
    "max_reciprocal_rank = df_tf_query_with_clicks['metrics.clicks.max_reciprocal_rank'].mean()\n",
    "\n",
    "print(f\"Max Reciprocal Rank: {round(max_reciprocal_rank, 2)}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Mean Reciprocal Rank\n",
    "\n",
    "Higher is better.  \n",
    "Best possible value: 1.0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Mean Per-Query Mean Reciprocal Rank: 0.28\n"
     ]
    }
   ],
   "source": [
    "mean_mean_reciprocal_rank = df_tf_query_with_clicks['metrics.clicks.mean_reciprocal_rank'].mean()\n",
    "\n",
    "print(f\"Mean Per-Query Mean Reciprocal Rank: {round(mean_mean_reciprocal_rank, 2)}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Time to First Click\n",
    "\n",
    "Lower is better.  \n",
    "Best possible value: 0.0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Time to First Click: 21.2 seconds\n"
     ]
    }
   ],
   "source": [
    "time_to_first_click = df_tf_query_with_clicks['metrics.clicks.time_to_first_click'].mean()\n",
    "\n",
    "print(f\"Time to First Click: {round(time_to_first_click / 1000, 2)} seconds\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Time to Last Click\n",
    "\n",
    "Higher is better (infers many interesting results)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Time to Last Click: 50.52 seconds\n"
     ]
    }
   ],
   "source": [
    "time_to_last_click = df_tf_query_with_clicks['metrics.clicks.time_to_last_click'].mean()\n",
    "\n",
    "print(f\"Time to Last Click: {round(time_to_last_click / 1000, 2)} seconds\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
